var Message = Ext.data.Record.create([{
			name : 'id',
			mapping : 'id',
			type : 'int'
		}, {
			name : 'sendManId',
			mapping : 'sendManId',
			type : 'int'
		}, {
			name : 'sendOrgId',
			mapping : 'sendOrgId',
			type : 'int'
		}, {
			name : 'replyManId',
			mapping : 'replyManId',
			type : 'int'
		}, {
			name : 'replyOrgId',
			mapping : 'replyOrgId',
			type : 'int'
		}, {
			name : 'title',
			mapping : 'title',
			type : 'string'
		}, {}, {
			name : 'content',
			mapping : 'content',
			type : 'string'
		}, {
			name : 'parentId',
			mapping : 'parentId',
			type : 'int'
		}, {
			name : 'msgType',
			mapping : 'msgType',
			type : 'string'
		}, {
			name : 'status',
			mapping : 'status',
			type : 'string'
		}]);
		
var ds_root_message_select = new Ext.data.Store({
		proxy : new Ext.data.HttpProxy({
				url : '/supervise/biz/message/findRootMessage.action'
			}),
		reader : new Ext.data.JsonReader({
				totalProperty : 'totalProperty',
				root : 'root'
			}, [{
					name : 'id',
					type : 'int'
				}, {
					name : 'sendManId',
					type : 'int'
				}, {
					name : 'sendOrgId',
					type : 'int'
				}, {
					name : 'replyManId',
					type : 'int'
				}, {
					name : 'replyOrgId',
					type : 'int'
				}, {
					name : 'title',
					type : 'string'
				}, {}, {
					name : 'content',
					type : 'string'
				}, {
					name : 'parentId',
					type : 'int'
				}, {
					name : 'msgType',
					type : 'string'
				}, {
					name : 'status',
					type : 'string'
				}])
	});
		
var cm_message = new Ext.grid.ColumnModel([
	new Ext.grid.RowNumberer({header : '序号', width : 40, dataIndex: 'id'}),
	{id: 'sendManId',header: "消息人", width: 100, sortable: true, dataIndex: 'sendManId',
		renderer : function(v) {
				var ret = '';
				var size = ds_user_select.getCount();
				for (var i = 0; i < size; i++) {
					var record = ds_user_select.getAt(i);
					var id = record.get('id');
					if (id == v) {
						ret = record.get('userName');
						break;
					}
				}
				return (ret == '' || ret == null) ? v : ret;
			}},
	{id: 'sendOrgId',header: "消息部门", width: 100, sortable: true, dataIndex: 'sendOrgId',
		renderer : function(v) {
				var ret = '';
				var size = ds_org_select.getCount();
				for (var i = 0; i < size; i++) {
					var record = ds_org_select.getAt(i);
					var id = record.get('id');
					if (id == v) {
						ret = record.get('name');
						break;
					}
				}
				return (ret == '' || ret == null) ? v : ret;
			}},
	{id: 'replyManId',header: "回复消息人", width: 100, sortable: true, dataIndex: 'replyManId',
		renderer : function(v) {
				var ret = '';
				var size = ds_user_select.getCount();
				for (var i = 0; i < size; i++) {
					var record = ds_user_select.getAt(i);
					var id = record.get('id');
					if (id == v) {
						ret = record.get('userName');
						break;
					}
				}
				return (ret == '' || ret == null) ? v : ret;
			}},
	{id: 'replyOrgId',header: "回复消息部门", width: 100, sortable: true, dataIndex: 'replyOrgId',
		renderer : function(v) {
				var ret = '';
				var size = ds_org_select.getCount();
				for (var i = 0; i < size; i++) {
					var record = ds_org_select.getAt(i);
					var id = record.get('id');
					if (id == v) {
						ret = record.get('name');
						break;
					}
				}
				return (ret == '' || ret == null) ? v : ret;
			}},
	{id: 'title',header: "标题", width: 100, sortable: true, dataIndex: 'title'},
	{id: 'content',header: "消息内容", width: 100, sortable: true, dataIndex: 'content'},
	{id: 'parentId',header: "源消息", width: 100, sortable: true, dataIndex: 'parentId',renderer: function(v){if(Ext.isEmpty(v) || v==0){ return '';} return v;}},
    {id: 'msgType',header: "消息类型 ", width: 80, sortable: true, dataIndex: 'msgType',renderer: fun_getMessageType},
    {id: 'status',header: "状态", width: 80, sortable: true, dataIndex: 'status',renderer: fun_getMessageStatus}
]);

cm_message.defaultSortable = false;

var window_add_message = new Ext.Window({
		title : '添加消息',
		width : 450,
		height : 500,
		resizable : false,
		autoHeight : true,
		modal : true,
		closeAction : 'hide',
//        plain: true,
		listeners : {
			'hide' : function() {
				this.setTitle('添加消息'); 
				Ext.getCmp("form_add_message").getForm().reset();
			}
		},
		items : [new Ext.FormPanel({
				id : 'form_add_message',
				labelWidth : 80,
				labelAlign : 'right',
				url : '/supervise/biz/message/saveMessage.action',
				border : false,
				baseCls : 'x-plain',
				bodyStyle : 'padding:5px 5px 0',
				anchor : '90%',
				defaults : {
					width : 300,
					msgTarget : 'side'
				},
				defaultType : 'textfield',
				items : [{
							xtype : 'hidden',
							name : 'message.id'
						}, {
							xtype : 'combo',
							fieldLabel : '消息部门',
							hiddenName : 'message.sendOrgId',
							valueField : 'id',
							displayField : 'name',
							mode : 'remote',
							store : ds_org_select,
							selectOnFocus : true,
							editable : false,
							allowBlank : false,
							triggerAction : 'all',
							loadingText : '加载中...',
							emptyText : '请选择部门',
							listeners : {
								'select' : function(combo, record, index) {
									try {
										var sendMan = Ext.getCmp('add_message_sendManId');
										sendMan.clearValue();
										sendMan.store.reload({
													params : {
														orgId : combo.getValue()
													}
												});
									} catch (ex) {
										Ext.MessageBox.alert(ex);
									}
								}
							}
						}, {
							xtype : 'combo',
							fieldLabel : '消息人',
							hiddenName : 'message.sendManId',
							id: 'add_message_sendManId',
							valueField : 'id',
							displayField : 'userName',
							mode : 'local',
							store : new Ext.data.Store({
								url : '/supervise/sys/user/findByOrg.action',
								reader : new Ext.data.JsonReader({
											root : 'root'
										}, [{
													name : 'id',
													type : 'int'
												}, {
													name : 'userName',
													type : 'string'
												}])
							}),
							selectOnFocus : true,
							editable : false,
							allowBlank : false,
							triggerAction : 'all',
							loadingText : '加载中...',
							emptyText : '请选择人员'
						},{
							xtype : 'combo',
							fieldLabel : '回复部门',
							hiddenName : 'message.replyOrgId',
							valueField : 'id',
							displayField : 'name',
							mode : 'remote',
							store : ds_org_select,
							selectOnFocus : true,
							editable : false,
							allowBlank : false,
							triggerAction : 'all',
							loadingText : '加载中...',
							emptyText : '请选择部门',
							listeners : {
								'select' : function(combo, record, index) {
									try {
										var replyManId = Ext.getCmp('add_message_replyManId');
										replyManId.clearValue();
										replyManId.store.reload({
													params : {
														orgId : combo.getValue()
													}
												});
									} catch (ex) {
										Ext.MessageBox.alert(ex);
									}
								}
							}
						}, {
							xtype : 'combo',
							fieldLabel : '回复人',
							id: 'add_message_replyManId',
							hiddenName : 'message.replyManId',
							valueField : 'id',
							displayField : 'userName',
							mode : 'local',
							store : new Ext.data.Store({
								url : '/supervise/sys/user/findByOrg.action',
								reader : new Ext.data.JsonReader({
											root : 'root'
										}, [{
													name : 'id',
													type : 'int'
												}, {
													name : 'userName',
													type : 'string'
												}])
							}),
							selectOnFocus : true,
							editable : false,
							allowBlank : false,
							triggerAction : 'all',
							loadingText : '加载中...',
							emptyText : '请选择人员'
						}, {
							fieldLabel : '标题',
							name : 'message.title',
							grow : false,
							allowBlank : false,
							blankText : "这个字段最好不要为空",
							msgTarget : 'under'
						}, {
							xtype : 'textarea',
							fieldLabel : '消息内容',
							name : 'message.content',
							grow : false,
							allowBlank : false,
							blankText : "这个字段最好不要为空",
							msgTarget : 'under'
						},{
							xtype : 'combo',
							fieldLabel : '源消息',
							hiddenName : 'message.parentId',
							valueField : 'id',
							displayField : 'title',
							mode : 'remote',
							store : ds_root_message_select,
							selectOnFocus : true,
							editable : false,
							allowBlank : true,
							triggerAction : 'all',
							loadingText : '加载中...',
							emptyText : '请选择消息'
						},{
							xtype : 'combo',
							fieldLabel : '消息类型',
							mode : 'local',
							name : 'message_type',
							hiddenName : 'message.msgType',
							editable : false,
							store :  new Ext.data.SimpleStore({
								data : data_message_type,
								fields : ['text', 'value']
							}),
							displayField : 'text',
							valueField : 'value',
							mode : 'local',
							triggerAction : 'all',
							emptyText : '请选择类型'
						}, {
							xtype : 'combo',
							fieldLabel : '消息状态',
							mode : 'local',
							name : 'message_status',
							hiddenName : 'message.status',
							editable : false,
							store : new Ext.data.SimpleStore({
								data : data_message_status,
								fields : ['text', 'value']
							}),
							displayField : 'text',
							valueField : 'value',
							mode : 'local',
							triggerAction : 'all',
							emptyText : '请选择状态'

						}],
				buttonAlign : 'center',
				minButtonWidth : 60,
				buttons : [{
							text : '添加消息',
							handler : function(btn) {
								var frm = Ext.getCmp("form_add_message").getForm();
								if (frm.isValid()) {
									btn.disable(); 
									frm.submit({
												waitTitle : '请稍候',
												waitMsg : '正在提交表单数据,请稍候...',
												timeout : 600000,
												success : function(form, action) {
													var store = grid_message.getStore();
													if (store.data.length <= 20) {
														var message = new Message({
															id : action.result.id,
															sendManId : form.findField('message.sendManId').getValue(),
															sendOrgId : form.findField('message.sendOrgId').getValue(),
															replyManId : form.findField('message.replyManId').getValue(),
															replyOrgId : form.findField('message.replyOrgId').getValue(),
															title : form.findField('message.title').getValue(),
															content : form.findField('message.content').getValue(),
															parentId : form.findField('message.parentId').getValue(),
															status : form.findField('message.status').getValue(),
															msgType : form.findField('message.msgType').getValue()
														});
														store.insert(0, [message]);
														if (store.data.length > 20) {
															store.remove(store.getAt(store.data.length - 1));
														}
													}
													frm.reset();
													btn.enable();
													window_add_message.hide();
												},
												failure : function() {
													Ext.Msg.show({
																title : '错误提示',
																msg : '"' + dnfield.getValue() + '" ' + '名称可能已经存在!',
																buttons : Ext.Msg.OK,
																fn : function() {
																	dnfield.focus(true);
																	btn.enable();
																},
																icon : Ext.Msg.ERROR
															});
												}
											});
								}
							}
						}, {
							text : '重置',
							handler : function() {
								Ext.getCmp("form_add_message").getForm().reset();
							}
						}, {
							text : '取消',
							handler : function() { 
								window_add_message.hide();
							}
						}]
			})]
	});
	
var form_edit_message = new Ext.form.FormPanel({
		id : 'form_edit_message',
		labelWidth : 80,
		labelAlign : 'right',
		url : '/supervise/biz/message/saveMessage.action',
		border : false,
		baseCls : 'x-plain',
		bodyStyle : 'padding:5px 5px 0',
		anchor : '90%',
		defaults : {
			width : 300,
			msgTarget : 'side'
		},
		defaultType : 'textfield',
		items : [{
							xtype : 'hidden',
							name : 'message.id'
						}, {
							xtype : 'combo',
							fieldLabel : '消息部门',
							hiddenName : 'message.sendOrgId',
							valueField : 'id',
							displayField : 'name',
							mode : 'remote',
							store : ds_org_select,
							selectOnFocus : true,
							editable : false,
							allowBlank : false,
							triggerAction : 'all',
							loadingText : '加载中...',
							emptyText : '请选择部门',
							listeners : {
								'select' : function(combo, record, index) {
									try {
										var sendMan = Ext.getCmp('edit_message_sendManId');
										sendMan.clearValue();
										sendMan.store.reload({
													params : {
														orgId : combo.getValue()
													}
												});
									} catch (ex) {
										Ext.MessageBox.alert(ex);
									}
								}
							}
						}, {
							xtype : 'combo',
							fieldLabel : '消息人',
							hiddenName : 'message.sendManId',
							id: 'edit_message_sendManId',
							valueField : 'id',
							displayField : 'userName',
							mode : 'local',
							store : new Ext.data.Store({
								url : '/supervise/sys/user/findByOrg.action',
								reader : new Ext.data.JsonReader({
											root : 'root'
										}, [{
													name : 'id',
													type : 'int'
												}, {
													name : 'userName',
													type : 'string'
												}])
							}),
							selectOnFocus : true,
							editable : false,
							allowBlank : false,
							triggerAction : 'all',
							loadingText : '加载中...',
							emptyText : '请选择人员'
						},{
							xtype : 'combo',
							fieldLabel : '回复部门',
							hiddenName : 'message.replyOrgId',
							valueField : 'id',
							displayField : 'name',
							mode : 'remote',
							store : ds_org_select,
							selectOnFocus : true,
							editable : false,
							allowBlank : false,
							triggerAction : 'all',
							loadingText : '加载中...',
							emptyText : '请选择部门',
							listeners : {
								'select' : function(combo, record, index) {
									try {
										var replyManId = Ext.getCmp('edit_message_replyManId');
										replyManId.clearValue();
										replyManId.store.reload({
													params : {
														orgId : combo.getValue()
													}
												});
									} catch (ex) {
										Ext.MessageBox.alert(ex);
									}
								}
							}
						}, {
							xtype : 'combo',
							fieldLabel : '回复人',
							id: 'edit_message_replyManId',
							hiddenName : 'message.replyManId',
							valueField : 'id',
							displayField : 'userName',
							mode : 'local',
							store : new Ext.data.Store({
								url : '/supervise/sys/user/findByOrg.action',
								reader : new Ext.data.JsonReader({
											root : 'root'
										}, [{
													name : 'id',
													type : 'int'
												}, {
													name : 'userName',
													type : 'string'
												}])
							}),
							selectOnFocus : true,
							editable : false,
							allowBlank : false,
							triggerAction : 'all',
							loadingText : '加载中...',
							emptyText : '请选择人员'
						}, {
							fieldLabel : '标题',
							name : 'message.title',
							grow : false,
							allowBlank : false,
							blankText : "这个字段最好不要为空",
							msgTarget : 'under'
						}, {
							xtype : 'textarea',
							fieldLabel : '消息内容',
							name : 'message.content',
							grow : false,
							allowBlank : false,
							blankText : "这个字段最好不要为空",
							msgTarget : 'under'
						},{
							xtype : 'combo',
							fieldLabel : '源消息',
							hiddenName : 'message.parentId',
							valueField : 'id',
							displayField : 'title',
							mode : 'remote',
							store : ds_root_message_select,
							selectOnFocus : true,
							editable : false,
							allowBlank : true,
							triggerAction : 'all',
							loadingText : '加载中...',
							emptyText : '请选择消息'
						},{
							xtype : 'combo',
							fieldLabel : '消息类型',
							mode : 'local',
							name : 'message_type',
							hiddenName : 'message.msgType',
							editable : false,
							store :  new Ext.data.SimpleStore({
								data : data_message_type,
								fields : ['text', 'value']
							}),
							displayField : 'text',
							valueField : 'value',
							mode : 'local',
							triggerAction : 'all',
							emptyText : '请选择类型'
						}, {
							xtype : 'combo',
							fieldLabel : '消息状态',
							mode : 'local',
							name : 'message_status',
							hiddenName : 'message.status',
							editable : false,
							store : new Ext.data.SimpleStore({
								data : data_message_status,
								fields : ['text', 'value']
							}),
							displayField : 'text',
							valueField : 'value',
							mode : 'local',
							triggerAction : 'all',
							emptyText : '请选择状态'

						}],
		buttonAlign : 'center',
		minButtonWidth : 60,
		buttons : [{
					text : '修改',
					handler : function(btn) {
						var frm = Ext.getCmp("form_edit_message").getForm();
						if (frm.isValid()) {
							btn.disable();
							// var dnfield = frm.findField('message.name');
							frm.submit({
										waitTitle : '请稍候',
										waitMsg : '正在提交表单数据,请稍候...',
										timeout : 600000,
										success : function(form, action) {
											var record = grid_message.getSelectionModel().getSelected();
											// set value
											record.set("sendManId", frm.findField('message.sendManId').getValue());
											record.set("sendOrgId", frm.findField('message.sendOrgId').getValue());
											record.set("replyManId", frm.findField('message.replyManId').getValue());
											record.set("replyOrgId", frm.findField('message.replyOrgId').getValue());
											record.set("title", frm.findField('message.title').getValue());
											record.set("content", frm.findField('message.content').getValue());
											record.set("parentId", frm.findField('message.parentId').getValue());
											record.set("msgType", frm.findField('message.msgType').getValue());
											record.set("status", frm.findField('message.status').getValue());
											record.commit();
											frm.reset();
											btn.enable();
											window_edit_message.hide();
										},
										failure : function() {
											Ext.Msg.show({
														title : '错误提示',
														msg : '"' + dnfield.getValue() + '" ' + '名称可能已经存在!',
														buttons : Ext.Msg.OK,
														fn : function() {
															dnfield.focus(true);
															btn.enable();
														},
														icon : Ext.Msg.ERROR
													});
										}
									});
						}
					}
				}, {
					text : '取消',
					handler : function() {
						window_edit_message.hide();
					}
				}]
	});

var window_edit_message = new Ext.Window({
		title : '修改消息',
		width : 450,
		height : 500,
		resizable : false,
		autoHeight : true,
		modal : true,
		closeAction : 'hide',
		listeners : {
			'hide' : function() {
				this.setTitle('修改消息');
			    Ext.getCmp("form_edit_message").getForm().reset();
			}
		},
		items : form_edit_message
	});

var btn_add_message = new Ext.Button({
		text : '添加',
		iconCls : 'icon-add',
		handler : function() {
			window_add_message.show(this);
			window_add_message.center();
		}
	});

var btn_edit_message = new Ext.Button({
		text : '修改',
		iconCls : 'icon-edit',
		handler : function() {
			if (!grid_message.checkOne()) {
				return;
			}
			window_edit_message.show(this);
			window_edit_message.center();
			var record = grid_message.getSelectionModel().getSelected();
			// Ext.getCmp("form_edit_message").getForm().loadRecord(record);
			var frm = Ext.getCmp("form_edit_message").getForm();
			// set value
			frm.findField('message.id').setValue(record.get("id"));
			frm.findField('message.sendManId').setValue(record.get("sendManId"));
			frm.findField('message.sendOrgId').setValue(record.get("sendOrgId"));
			frm.findField('message.replyManId').setValue(record.get("replyManId"));
			frm.findField('message.replyOrgId').setValue(record.get("replyOrgId"));
			frm.findField('message.title').setValue(record.get("title"));
			frm.findField('message.content').setValue(record.get("content"));
			frm.findField('message.parentId').setValue(record.get("parentId"));
			frm.findField('message.msgType').setValue(record.get("msgType"));
			frm.findField('message.status').setValue(record.get("status"));
			
			if(record.get("parentId") == 0){
				frm.findField('message.parentId').clearValue();
			}
	
		}
	});
	
var btn_del_message = new Ext.Button({
		text : '删除',
		iconCls : 'icon-del',
		handler : function() {
			if (!grid_message.checkOne()) {
				return;
			}
			var record = grid_message.getSelectionModel().getSelected();
			if (record) {
				Ext.Msg.confirm('确认删除', '你确定删除该条记录?', function(btn) {
							if (btn == 'yes') {
								Ext.Ajax.request({
											url : '/supervise/biz/message/deleteMessage.action',
											params : {
												id : record.data.id
											},
											success : function() {
												grid_message.getStore().remove(record);
											},
											failure : function() {
												Ext.Msg.show({
															title : '错误提示',
															msg : '删除时发生错误!',
															buttons : Ext.Msg.OK,
															icon : Ext.Msg.ERROR
														});
											}
										});
							}
						});
			}
		}
	});

var searchMessage = function() {
	ds_message.baseParams.conditions = text_search_message.getValue();// + ',' +
	ds_message.load({
				params : {
					start : 0,
					limit : 20
				}
			});
}

var btn_search_message = new Ext.Button({
		text : '查询',
		iconCls : 'icon-search',
		handler : searchMessage
	});

var text_search_message = new Ext.form.TextField({
		name : 'textSearchDept',
		width : 200,
		emptyText : '多条件可用逗号或者空格隔开!',
		listeners : {
			'specialkey' : function(field, e) {
				if (e.getKey() == Ext.EventObject.ENTER) {
					searchMessage();
				}
			}
		}
	});

var ds_message = new Ext.data.Store({
		proxy : new Ext.data.HttpProxy({
				url : '/supervise/biz/message/findAllMessage.action'
			}),
		reader : new Ext.data.JsonReader({
				totalProperty : 'totalProperty',
				root : 'root'
			}, [{
					name : 'id',
					type : 'int'
				}, {
					name : 'sendManId',
					type : 'int'
				}, {
					name : 'sendOrgId',
					type : 'int'
				}, {
					name : 'replyManId',
					type : 'int'
				}, {
					name : 'replyOrgId',
					type : 'int'
				}, {
					name : 'title',
					type : 'string'
				}, {}, {
					name : 'content',
					type : 'string'
				}, {
					name : 'parentId',
					type : 'int'
				}, {
					name : 'msgType',
					type : 'string'
				}, {
					name : 'status',
					type : 'string'
				}])
	});
	
var grid_message = new Ext.grid.GridPanel({
		title : '消息管理',
		iconCls : 'icon-plugin',
		region : 'center',
		loadMask : {
			msg : '数据加载中...'
		},
		cm : cm_message,
		ds : ds_message,
		sm : new Ext.grid.CheckboxSelectionModel({
				singleSelect : false
			}),
		enableColumnMove : false,
		trackMouseOver : false,
		frame : true,
		autoExpandColumn : 'content',
		clicksToEdit : 1,
		tbar : [btn_add_message, '-', btn_edit_message, '-', btn_del_message, '->',
				text_search_message, btn_search_message],
		bbar : new Ext.PagingToolbar({
				pageSize : 20,
				store : ds_message,
				displayInfo : true,
				displayMsg : '第 {0} - {1} 条  共 {2} 条',
				emptyMsg : "没有记录"
			}),
		// 检测至少选择一个
		checkOne : function() {
			var selections = this.getSelectionModel().getSelections();
			if (selections.length == 0) {
				Ext.MessageBox.alert("提示", "请选择一条的记录！");
				return false;
			} else if (selections.length != 1) {
				Ext.MessageBox.alert("提示", "不能选择多行！");
				return false;
			}
			return true;
		},

		// 检测必须选择一个
		checkMany : function() {
			var selections = this.getSelectionModel().getSelections();
			if (selections.length == 0) {
				Ext.MessageBox.alert("提示", "请至少选择一条的记录！");
				return false;
			}
			return true;
		},

		listeners : {}
	});

var p_message = {
	id : 'message-panel',
	border : false,
	layout : 'border',
	items : [grid_message]
}
